package delphorm.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

import delphorm.entite.personne.Utilisateur;
import delphorm.entite.questionnaire.Questionnaire;
import delphorm.service.questionnaire.IQuestionnaire;


public class AjouterQuestionnaireSession extends SimpleFormController {
	IQuestionnaire serviceQuestionnaire;
	public IQuestionnaire getServiceQuestionnaire() {
		return serviceQuestionnaire;
	}

	public void setServiceQuestionnaire(IQuestionnaire serviceQuestionnaire) {
		this.serviceQuestionnaire = serviceQuestionnaire;
	}

	/* cette méthode permet de récupérer un formulaire déjà rempli*/
	protected Object formBackingObject(HttpServletRequest request)
	{
		//récupère le formulaire dans la session
		Object formulaire = request.getSession().getAttribute("formulaire");
		
		if(formulaire == null)
		{ 
			String nQuestionnaire = request.getParameter("idquestionnaire");
			if(nQuestionnaire != null)
			{ //c'est pour modifier un questionnaire
				Long numeroQuestionnaire = new Long(Long.parseLong(nQuestionnaire));
				//TODO exceptioon si null
				formulaire = serviceQuestionnaire.getQuestionnaireParId(numeroQuestionnaire);
			}
			else
			{
				Questionnaire questionnaire = (Questionnaire)request.getSession().getAttribute("questionnaire");
				String nouveau = request.getParameter("nouveau");
				if((nouveau == null  && questionnaire==null) || (nouveau != null && nouveau.equals("oui")))
				{ //c'est un nouveau questionnaire
			 		Utilisateur utilisateur = (Utilisateur)request.getSession().getAttribute("utilisateur");
					formulaire = serviceQuestionnaire.nouveauQuestionnaire(utilisateur);
				}
				
				else if(questionnaire != null)
				{ //c'est un questionnaire en cours d'édition et on souhaite le modifier
					formulaire = questionnaire;
				}
				
				//TODO else exception
			}
			
			
		}

//		met le questionnaire dans la session
		request.getSession().setAttribute("questionnaire", formulaire);
		
		return formulaire;
	}
	
	//cette méthode permet d'obtenir l'objet formulaire dans la page de confirmation
	protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object questionnaire, BindException errors)
	{		
		//mettre le questionnaire dans la session
		request.getSession().setAttribute("questionnaire",questionnaire);
		
		//rendre le model and view
		//pas de modele
		return new ModelAndView(getSuccessView(),null);
	}
	
}
